package com.huike.report.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.huike.business.domain.TbBusiness;
import com.huike.clues.domain.vo.BusinessChangeStatisticsVo;
import com.huike.report.domain.vo.*;
import org.apache.ibatis.annotations.Param;

import com.huike.clues.domain.TbActivity;
import com.huike.clues.domain.TbClue;
import com.huike.clues.domain.vo.IndexStatisticsVo;
import com.huike.contract.domain.TbContract;

/**
 * 电子服务
 *
 * @author zhouao
 * @date 2022/05/16
 */

public interface IReportService {

    /**
     * 合同统计
     * 新增客户统计
     *
     * @param beginCreateTime 开始创建时间
     * @param endCreateTime   最终创建时间
     * @return {@link LineChartVO}
     */
    public LineChartVO contractStatistics(String beginCreateTime, String endCreateTime);


    /**
     * 合同报告列表
     * 客户统计报表
     *
     * @param tbContract 结核病合同
     * @return {@link List}<{@link TbContract}>
     */
    public List<TbContract> contractReportList(TbContract tbContract);

    /**
     * 销售统计
     *
     * @param beginCreateTime 开始创建时间
     * @param endCreateTime   最终创建时间
     * @return {@link LineChartVO}
     */
    public LineChartVO salesStatistics(String beginCreateTime, String endCreateTime);


    /**
     * 部门统计列表
     * 销售统计部门报表
     *
     * @param beginCreateTime 开始创建时间
     * @param endCreateTime   最终创建时间
     * @return {@link List}<{@link Map}<{@link String}, {@link Object}>>
     */
    public List<Map<String, Object>> deptStatisticsList(String beginCreateTime, String endCreateTime);

    /**
     * 频道统计列表
     * 销售统计渠道报表
     *
     * @param beginCreateTime 开始创建时间
     * @param endCreateTime   最终创建时间
     * @return {@link List}<{@link Map}<{@link String}, {@link Object}>>
     */
    public List<Map<String, Object>> channelStatisticsList(String beginCreateTime, String endCreateTime);

    /**
     * 主人船统计列表
     * 销售统计归属人报表
     *
     * @param beginCreateTime 开始创建时间
     * @param endCreateTime   最终创建时间
     * @return {@link List}<{@link Map}<{@link String}, {@link Object}>>
     */
    public List<Map<String, Object>> ownerShipStatisticsList(String beginCreateTime, String endCreateTime);


    /**
     * 香奈儿统计数据
     * 渠道统计
     *
     * @param beginCreateTime 开始创建时间
     * @param endCreateTime   最终创建时间
     * @return {@link List}<{@link Map}<{@link String}, {@link Object}>>
     */
    public List<Map<String, Object>> chanelStatistics(String beginCreateTime, String endCreateTime);


    /**
     * 活动统计
     *
     * @param beginCreateTime 开始创建时间
     * @param endCreateTime   最终创建时间
     * @return {@link List}<{@link Map}<{@link String}, {@link Object}>>
     */
    public List<Map<String, Object>> activityStatistics(String beginCreateTime, String endCreateTime);


    /**
     * 线索统计列表
     *
     * @param clue 线索
     * @return {@link List}<{@link TbClue}>
     */
    public List<TbClue> cluesStatisticsList(TbClue clue);

    /**
     * 活动统计列表
     * 活动渠道统计
     *
     * @param activity 活动
     * @return {@link List}<{@link ActivityStatisticsVo}>
     */
    public List<ActivityStatisticsVo> activityStatisticsList(TbActivity activity);


    /**
     * 得到指数
     *
     * @param request 请求
     * @return {@link IndexVo}
     */
    public IndexVo getIndex(IndexStatisticsVo request);


    /**
     * 销售统计指数
     *
     * @param request 请求
     * @return {@link List}<{@link Map}<{@link String}, {@link Object}>>
     */
    public List<Map<String, Object>> salesStatisticsForIndex(IndexStatisticsVo request);


    /**
     * 得到基本信息
     * 首页基本数据展示
     *
     * @param beginCreateTime 开始创建时间
     * @param endCreateTime   最终创建时间
     * @return {@link IndexBaseInfoVO}
     */
    IndexBaseInfoVO getBaseInfo(String beginCreateTime, String endCreateTime);


    IndexTodayInfoVO getTodayInfo(String time);

    IndexTodoInfoVO getTodoInfo(String beginCreateTime, String endCreateTime);

    List<Map<String, Object>> subjectStatistics(String beginCreateTime, String endCreateTime);

    LineChartVO cluesStatistics(String beginCreateTime, String endCreateTime);

    VulnerabilityMapVo getVulnerabilityMap(String beginCreateTime, String endCreateTime);

    /**
     * 龙虎榜
     *
     * @param beginCreateTime:
     * @param endCreateTime:
     * @return List<HashMap < String, Object>>
     * @author Administrator
     * @description TODO
     * @date 2022/5/17 19:30
     */
    List<BusinessChangeStatisticsVo> businessChangeStatistics(String beginCreateTime, String endCreateTime);
     List<Map<String,Object>> clueChangeStatisticsForIndex(String beginCreateTime, String endCreateTime);
}
